#include "server.h"
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>

void ensure_user_directory(const char* username) {
    char user_dir[PATH_MAX];
    snprintf(user_dir, PATH_MAX, "%s/%s", FTP_ROOT_DIR, username);
    
    // 初始化一个 stat 结构体，用于存储文件或目录的状态信息
    struct stat st = {0};
    
    // 使用 stat 函数检查用户目录是否存在
    // 如果 stat 返回 -1，表示目录不存在
    if (stat(user_dir, &st) == -1) {
        // 打印用户目录路径，用于调试
        printf("user_dir: %s\n", user_dir);
        
        // 使用 mkdir 函数创建用户目录
        // 0700 是目录权限，表示只有所有者有读、写、执行权限
        mkdir(user_dir, 0700);  // 创建用户目录，并设置适当的权限
    }
}

int handle_register(ServerInfo* server, int client_index, const char* username, const char* password) {
    Message response;
    ClientInfo* client = &server->clients[client_index];

    // TODO: 检查用户名是否已存在

    strncpy(client->username, username, MAX_USERNAME_LEN);
    strncpy(client->password, password, MAX_PASSWORD_LEN);
    
    ensure_user_directory(username);
    snprintf(client->root_dir, PATH_MAX, "%s/%s", FTP_ROOT_DIR, username);

    response.type = MSG_TYPE_REGISTER_SUCCESS;
    response.length = snprintf(response.data, sizeof(response.data), "注册成功");

    if (send_message(client->socket, &response) < 0) {
        perror("发送注册响应失败");
        return -1;
    }

    printf("用户 %s 注册成功\n", username);
    return 0;
}